#利用管道实现多进程协作：子线程计算结果，返回给主线程
from multiprocessing import Pipe, Process

def mark(pipe):
    #接受参数
    server_p, client_p = pipe
    #消费者（子进程）此实例只接收，所以把输入关闭
    client_p.close()

    while True:
        try:
            x,y = server_p.recv()
        except EOFError:
            print("报错了")
            break
        result=x+y
        server_p.send(result)
    print("mark执行完成")


if __name__ == "__main__":
    #必须在多进程创建之前，创建管道,该管道是双向的
    (server_p, client_p) = Pipe()#创建管道
    #创建一个进程，并把管道两端都作为参数传递过去
    p = Process(target=mark, args=((server_p, client_p),))
    #启动进程
    p.start()
    #生产者（主进程）此实例只输入，所以关闭输出（接收端）
    server_p.close()

    #发送数据
    client_p.send((4,5))
    #打印接受到的数据
    print(client_p.recv())

    client_p.send(("Mark", "大帅哥"))
    # 打印接受到的数据
    print(client_p.recv())





    #关闭生产者（主进程）的输入端
    client_p.close()


